//
//  WeiBoOriginalView.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/23.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit
import SnapKit
//第一部分:原创微博view(显示自己的原创信息)
class WeiBoOriginalView: UIView
{

    
    // MARK: - 懒加载控件
    // 头像
    private lazy var headImageView: UIImageView = UIImageView(imgName: "avatar_default")
    
    // 昵称
    private lazy var nameLabel: UILabel = UILabel(textColor: UIColor.blackColor(), textFont: 15)
    
    // 微博等级common_icon_membership
    private lazy var memberImageView: UIImageView = UIImageView(imgName: "common_icon_membership")
    
    // 微博时间
    private lazy var timeLabel: UILabel = UILabel(textColor: THEMEColor, textFont: 10)
    
    // 微博来源
    private lazy var sourceLabel: UILabel = UILabel(textColor: THEMEColor, textFont: 10)
    
    // 认证logo avatar_vgirl
    private lazy var avatarImageView: UIImageView = UIImageView(imgName: "avatar_vgirl")
    
    //正文
    private lazy var contentText:UILabel = {
       
        let lab:UILabel = UILabel(textColor: UIColor.darkGrayColor(), textFont: 15)
        
        //设置label显示的最大宽度
        lab.preferredMaxLayoutWidth = SCREENW - 20
        
        //设置lab自动换行
        lab.numberOfLines = 0
        
        return lab
    }()
    
    //配图
    private lazy var pictureCollectView:PictureCollectionView = PictureCollectionView()
    
    
    //视图整体的底部约束根据数据有没有配图信息来重新规划！！！，提取出来当做一个属性来处理
    //记住一定要导入SnapKit框架!!!
    var ViewBottomConstraint:Constraint?
    
    
    
    override init(frame: CGRect)
    {
        super.init(frame: frame)
        
        //布局界面
        setUpUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    //布局界面
    func setUpUI()
    {
         //设置原创视图的背景色为白色
         backgroundColor = UIColor.whiteColor()
        
        //添加控件
        addSubview(headImageView)
        addSubview(nameLabel)
        addSubview(memberImageView)
        addSubview(timeLabel)
        addSubview(sourceLabel)
        addSubview(avatarImageView)
        addSubview(contentText)
        addSubview(pictureCollectView)
        
        
        //设置控件的约束
        // 01
        headImageView.snp_makeConstraints { (make) -> Void in
            make.top.leading.equalTo(10)
            make.size.equalTo(CGSize(width: 35, height: 35))
        }
        // 02
        nameLabel.snp_makeConstraints { (make) -> Void in
            make.top.equalTo(headImageView)
            make.leading.equalTo(headImageView.snp_trailing).offset(10)
        }
        // 03
        memberImageView.snp_makeConstraints { (make) -> Void in
            make.leading.equalTo(nameLabel.snp_trailing).offset(10)
            make.centerY.equalTo(nameLabel)
        }
        // 04
        timeLabel.snp_makeConstraints { (make) -> Void in
            make.leading.equalTo(nameLabel)
            make.bottom.equalTo(headImageView)
        }
        // 05
        sourceLabel.snp_makeConstraints { (make) -> Void in
            make.leading.equalTo(timeLabel.snp_trailing).offset(10)
            make.bottom.equalTo(timeLabel)
        }
        // 06
        avatarImageView.snp_makeConstraints { (make) -> Void in
            make.centerX.equalTo(headImageView.snp_trailing)
            make.centerY.equalTo(headImageView.snp_bottom)
        }
        
        //07:正文
        contentText.snp_makeConstraints { (make) in
            
            make.top.equalTo(avatarImageView.snp_bottom).offset(10)
            
            make.leading.equalTo(headImageView)
        }
        
        
        //08:配图
        pictureCollectView.snp_makeConstraints { (make) in
            
            make.top.equalTo(contentText.snp_bottom).offset(10)
            make.leading.equalTo((SCREENW - (homePicWandH*3 + homePicMargin*2))/2)
            
            //在collectionView的内部已经设置其最终的Size之后，此时在cell中设置的Size约束可以不需要了
            //make.size.equalTo(CGSize(width: 100, height: 100))
            
        }
        
        
        //09:用最后一个文本控件的约束来设置整个原创微博view的约束
        self.snp_makeConstraints { (make) in
            
            //顶部,左边，右边的约束不变
            make.top.leading.trailing.equalTo(self)
            
            //获取到当前View的底部约束引用，用来根据数据来重新设置约束
            self.ViewBottomConstraint =
            make.bottom.equalTo(pictureCollectView.snp_bottom).offset(10).constraint
        }
        
    }
    
    
    
    //从外界获取CellViewModel数据来设置cell的上控件的一些属性
    //此时获取到的viewModel数据是通过CellViewModel类对获取的网络数据dataModel进行数据处理好的数据
    var viewModel:CellViewModel?{
        
        //当viewModel的值改变时调用
        didSet
        {
            //viewModel做数据处理给cell上的控件设置属性
            //获取到处理好的viewModel属性之后对view上的空间赋值
            guard let u =  viewModel?.dataModel?.user else
            {
                return
            }
            //(1)headImageView头像
            let headImageUrl:String? = u.profile_image_url
            
            
            self.headImageView.sh_setImage(headImageUrl, placeholderImgName: "avatar_default")
            
            //(2)用户昵称
            self.nameLabel.text = u.name
            
            //(3)微博等级
            self.memberImageView.image = viewModel?.memberImage
            
            //(4)微博时间
            //self.timeLabel.text = "今天"
            self.timeLabel.text = viewModel?.weiboTime
            
            
            //(5)微博来源(设置label的富文本)
            //self.sourceLabel.text = viewModel?.sourceAttr
            self.sourceLabel.attributedText = viewModel?.sourceAttr
            
            //(6)认证logo
            self.avatarImageView.image = viewModel?.avatarImage
            
            //(7)文本数据(微博正文富文本)
            //self.contentText.text = viewModel?.dataModel?.text
            //利用正则表达式的思想处理文本数据中的有关表情名的数据
             self.contentText.attributedText = viewModel?.weiBoOriginalAttributedStr
            
            
            
            
            //(8)配图数据
            /*
             - 首先要卸载
             - 如果count > 0 代表有配图
             - 01 赋值
             - 02 更改约束
             - 03 显示配图（cell复用问题）
             - 反之 代表没有配图
             - 01 更改约束
             - 02 隐藏配图（cell复用问题）
             */
            //8.1 首先先卸载掉当前View的底部视图
            self.ViewBottomConstraint?.uninstall()
            
            
            //判断当前的微博有没有数据
            if viewModel?.dataModel?.pic_urls?.count == 0
            {
                //8.2更改整个view的约束
                self.snp_updateConstraints(closure: { (make) in
                    self.ViewBottomConstraint =
                        make.bottom.equalTo(contentText.snp_bottom).offset(10).constraint
                })
                
                //8.3显示配图view(为了复用)
                self.pictureCollectView.hidden = true
            }
            else
            {
                //8.2赋值给collectionView的pictureModel
              self.pictureCollectView.modelArray = viewModel?.dataModel?.pic_urls
                
                //8.3更改整个view的约束
                self.snp_updateConstraints(closure: { (make) in
                    self.ViewBottomConstraint =
                        make.bottom.equalTo(pictureCollectView.snp_bottom).offset(10).constraint                })
                
                //8.4显示配图view(为了复用)
                self.pictureCollectView.hidden = false
            }
            
            
        }
        
    }
    

}
